using System;
using System.Collections.Generic;
using System.Text;
using EntidadesTO;
using System.Data;
using System.Data.SqlClient;

namespace AccesoDatos
{
    public class CampanaDA
    {
        public List<CampanaTO> ListarPendientes()
        {
            List<CampanaTO> listaPendiente = new List<CampanaTO>();
            SqlDataReader reader = null;
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {
                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_get_SEC_Campana_estado", instanciaConexion.ObtenerConexion());
                comando.CommandType = CommandType.StoredProcedure;

                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    CampanaTO campanaTO = new CampanaTO();
                    campanaTO.CodCampana = reader.GetInt32(reader.GetOrdinal("codCampana"));
                    campanaTO.Objetivo = reader.GetString(reader.GetOrdinal("objetivo"));
                    campanaTO.FecInicio = reader.GetDateTime(reader.GetOrdinal("fecInicio"));
                    campanaTO.FecFin = reader.GetDateTime(reader.GetOrdinal("fecFin"));
                    campanaTO.BreveDescripcion = reader.GetString(reader.GetOrdinal("breveDescripcion"));
                    campanaTO.NumOrdMunicipal = reader.GetInt32(reader.GetOrdinal("numOrdMunicipal"));

                    listaPendiente.Add(campanaTO);
                }

                reader.Close();
                instanciaConexion.CerrarConexion();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                listaPendiente = null;

            }
            finally
            {
                if (reader != null)
                {
                    if (reader.IsClosed == false)
                        reader.Close();
                }
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }

            return listaPendiente;

        }

        public List<CampanaTO> ListarPorLlave(int pCodCampana)
        {
            List<CampanaTO> listaPendiente = new List<CampanaTO>();
            SqlDataReader reader = null;
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {
                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_get_SEC_Campana_key", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pCodCampana", pCodCampana);
                comando.CommandType = CommandType.StoredProcedure;

                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    CampanaTO campanaTO = new CampanaTO();
                    campanaTO.CodCampana = reader.GetInt32(reader.GetOrdinal("codCampana"));
                    campanaTO.Objetivo = reader.GetString(reader.GetOrdinal("objetivo"));
                    campanaTO.FecInicio = reader.GetDateTime(reader.GetOrdinal("fecInicio"));
                    campanaTO.FecFin = reader.GetDateTime(reader.GetOrdinal("fecFin"));
                    campanaTO.BreveDescripcion = reader.GetString(reader.GetOrdinal("breveDescripcion"));
                    campanaTO.NumOrdMunicipal = reader.GetInt32(reader.GetOrdinal("numOrdMunicipal"));

                    listaPendiente.Add(campanaTO);
                }

                reader.Close();
                instanciaConexion.CerrarConexion();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                listaPendiente = null;

            }
            finally
            {
                if (reader != null)
                {
                    if (reader.IsClosed == false)
                        reader.Close();
                }
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }

            return listaPendiente;

        }

        public void ActualizarEstado(int pEstado, int pCodCampana)
        {
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {
                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_upd_SEC_Campana_estado", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pCodCampana", pCodCampana);
                comando.Parameters.AddWithValue("@pEstado", pEstado);

                comando.CommandType = CommandType.StoredProcedure;

                comando.ExecuteNonQuery();

                instanciaConexion.CerrarConexion();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }

        }
    }
}
